﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Linq.Expressions;
using System.Text;

namespace EBA.Data
{
    /// <summary>
    /// 对象仓库。
    /// </summary>
    public interface IRepository<TEntity> : IQuery<TEntity>
    {
        /// <summary>
        /// 创建实例。
        /// </summary>
        TEntity NewEntity();
        /// <summary>
        /// 新增指定实例。
        /// </summary>
        void Add(TEntity entity);
        /// <summary>
        /// 删除指定实例。
        /// </summary>
        void Delete(TEntity entity);
        /// <summary>
        /// 删除所有指定实例。
        /// </summary>
        void DeleteAll(IEnumerable<TEntity> entities);
        /// <summary>
        /// 批量删除所有匹配的对象。
        /// </summary>
        int DeleteAll(Expression<Func<TEntity, bool>> filter);
        /// <summary>
        /// 批量更新所有匹配的对象。
        /// </summary>
        int UpdateAll(Expression<Func<TEntity, bool>> filter, Expression<Func <TEntity,object>> evaluator);

        /// <summary>
        /// 创建临时数据仓库，将对象临时持久化在该对象声明周期内。
        /// </summary>
        /// <returns></returns>
        IRepository<TEntity> CreateTransient();
    }
}
